/**
 * 学习助手后端启动脚本
 * 确保环境变量正确加载
 */
const path = require('path');
const fs = require('fs');
const dotenv = require('dotenv');
const { spawn } = require('child_process');

// 加载环境变量
const envPath = path.resolve(__dirname, '.env');
console.log('尝试从以下路径加载 .env 文件:', envPath);
console.log('.env 文件是否存在:', fs.existsSync(envPath));

if (fs.existsSync(envPath)) {
  console.log('加载 .env 文件...');
  dotenv.config({ path: envPath });
  
  // 检查关键环境变量
  console.log('环境变量加载状态:');
  console.log('- NODE_ENV:', process.env.NODE_ENV || '未设置');
  console.log('- PORT:', process.env.PORT || '未设置');
  console.log('- MONGO_URI:', process.env.MONGO_URI ? '已设置' : '未设置');
  console.log('- JWT_SECRET:', process.env.JWT_SECRET ? '已设置' : '未设置');
  console.log('- ALIBABA_QWEN_API_KEY:', process.env.ALIBABA_QWEN_API_KEY ? '已设置' : '未设置');
} else {
  console.warn('警告: .env 文件不存在，将使用默认环境变量');
}

// 使用不同的端口启动服务器（避免端口冲突）
const PORT = process.env.PORT || 5000;
const SAFE_PORT = parseInt(PORT) + 1;
process.env.PORT = SAFE_PORT;
console.log(`原端口 ${PORT} 可能被占用，使用安全端口 ${SAFE_PORT} 启动服务器...`);

// 启动服务器
console.log('启动服务器...');
const server = spawn('node', ['src/server.js'], { 
  stdio: 'inherit',
  env: { ...process.env }
});

server.on('close', (code) => {
  console.log(`服务器进程退出，退出码: ${code}`);
});

// 处理终止信号
process.on('SIGINT', () => {
  console.log('收到 SIGINT 信号，正在关闭服务器...');
  server.kill('SIGINT');
});

process.on('SIGTERM', () => {
  console.log('收到 SIGTERM 信号，正在关闭服务器...');
  server.kill('SIGTERM');
}); 